package com.martini.satoken01.anno;

import com.martini.satoken01.enums.LimitType;

import java.lang.annotation.*;

/**
 * 访问次数限制
 *
 * @author martini
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AccessLimited {

    /**
     * 限制类型
     */
    LimitType limitType() default LimitType.ACCOUNT;

    /**
     * 限制时间，单位毫秒
     */
    long limitDuration();

    /**
     * 限制次数
     */
    int limitTimes();

    /**
     * 是否限制必须登录
     */
    boolean limitAfterLogin() default true;

    /**
     * 注入次数的属性名称
     *
     * 有些时候我们需要对已经注入的次数进行判断，因此在参数中可能需要对已经注入的次数做判断
     * 注意这里的已经注入的次数不包括本次请求，为空不注入
     */
    String limitInjectRemainTimesAttr() default "";

    /**
     * 注入下次访问所需等待的时间，如果当前可以立即访问，注入0
     */
    String limitInjectNextPermissionTimeAttr() default "";

}
